import Vue from "vue";
import VueRouter from "vue-router";
// 使用插件
Vue.use(VueRouter);

import pageRoutes from "@/views/routes.js";

import store from "@/store";

// 封装VueRouter原型对象上的push方法
let originPush = VueRouter.prototype.push;

// 第一个参数，告诉原来的push方法往哪儿眺
VueRouter.prototype.push = function (location, resolve, reject) {
  if (resolve && reject) {
    originPush.call(this, location, resolve, reject);
  } else {
    originPush.call(
      this,
      location,
      () => {},
      () => {}
    );
  }
};
// 封装VueRouter原型对象上的replace方法
let originReplace = VueRouter.prototype.replace;
// 第一个参数，告诉原来的push方法往哪儿眺
VueRouter.prototype.replace = function (location, resolve, reject) {
  if (resolve && reject) {
    originReplace.call(this, location, resolve, reject);
  } else {
    originReplace.call(
      this,
      location,
      () => {},
      () => {}
    );
  }
};

let router = new VueRouter({
  // 配置路由
  routes: pageRoutes,
  scrollBehavior(to, from, savedPosition) {
    // 滚动条在跳转到新路由时的位置
    return { y: 0 };
  },
});

// 全局路由守卫:前置守卫
router.beforeEach(async (to, from, next) => {
  // to:可以获取想要跳转的路由信息
  // from:从哪个路由而来的信息
  // next：放行的函数
  // next();直接放行 next('/login')放行到指定路由   next(false)中断当前导航会重置到from
  // 用户登录了就有token
  let token = store.state.user.token;
  let name = store.state.user.userInfo.name;

  if (token) {
    //  已经登录，无法去login，只能在home
    if (to.path == "/login" || to.path == "/register") {
      next("/home");
    } else {
      // 已登录，去的不是login
      if (name) {
        next();
      } else {
        try {
          // 获取用户信息成功
          await store.dispatch("getUserInfo");
          next();
        } catch (error) {
          // 用户登陆了，但是token过期了
          // 清除token，重新登录
         await store.dispatch('userLogout')
         next('/login')
        }
      }
    }
  } else {
    // 未登录:不能去交易相关的页面【pay|paysuccess】、不能个人中心
    let toPath=to.path;
    // console.log(toPath)
    if(toPath.indexOf('/trade')!==-1 || toPath.indexOf('/pay')!==-1 ||toPath.indexOf('/center')!==-1){
      // 把未登录的时候去而没去成的信息，存储到地址栏中
      next('/login?redirect='+toPath)
    }else{
      next();
    }
    
  }
});

export default router;
